Глава 12. Периодические расчеты
12.1. Общая информация
Периодические расчеты ‑ это вычисления, осуществляемые с определенной периодичностью, тесно связанные друг с другом по некоторым правилам и взаимно влияющие друг на друга в пределах некоторого периода.
Механизмы периодических расчетов позволяют настроить порядок и взаимосвязь вычислений и организовать учет их результатов.
Наиболее типичным примером использования периодических расчетов является расчет заработной платы, при котором производятся расчеты начислений и удержаний. Расчеты обычно выполняются с месячной периодичностью, а результаты расчетов одного вида могут зависеть от наличия и результатов расчетов другого вида.
Ведение периодических расчетов в системе «1С:Предприятие» обеспечивают объекты конфигурации Планы видов расчета и Регистры расчета. Так как эти объекты тесно связаны между собой, в данной главе дается общая характеристика возможностей, предоставляемых этими объектами.
В последующих разделах будут рассмотрены вопросы конфигурирования перечисленных объектов.
12.2. Основные понятия
Период. Для расчетов важным является понятие периода. Обычно период описывается датой начала и датой окончания. Если для расчета определена периодичность (см. описание ниже), то для описания периода (действия, регистрации) данного расчета достаточно указать любую дату. По этой дате вычисляется дата начала периода, и именно эта дата будет описывать период. Такой порядок определения периода позволяет оптимизировать выполнение запросов, в которых требуется выбрать записи, относящиеся к указанному периоду.
Периодичность расчетов. Определяет, с каким периодом будут (могут) выполняться расчеты, учитываемые данным регистром. Задается в свойстве Периодичность регистра расчетов. По значению этого свойства (если регистр периодический) определяется период действия записи регистра расчета. Например, регистр имеет периодичность Месяц, тогда при формировании записи регистра в качестве периода действия выбирается дата документа (например, некий расчет за ноябрь 2008 г.), и по ней система определяет период действия на начало 01.11.2008.
Период регистрации ‑ дата начала периода, указанного при регистрации расчета (вычисляется по дате документа-регистратора). Например, в июне 2008 г. производится начисление оклада за май 2008 г. (расчеты с периодичностью Месяц). Май 2008 г. ‑ период действия (в базе данных записывается дата 01.05.2008), а июнь 2008 г. ‑ период регистрации (в базе данных записывается дата 01.06.2008).
Период действия ‑ начальная дата периода, определяемая в соответствии со значением свойства Периодичность. Например, в документе указывается, что расчет производится за май 2008 г. Для значения свойства Периодичность регистра Месяц период действия определяется датой 01.05.2008; для значения Квартал ‑ 01.04.2008.
Период действия расчета ‑ указывает период, за который производится расчет. Период определяется датой начала и датой окончания периода. Например, запись о больничном листе за май 2008 г. имеет период действия 01.05.2008, а период действия расчета определяется датой начала (например, 06.05.2008) и датой окончания (например, 15.05.2008).
Механизм вытеснения или конкуренция за период действия расчета ‑ проявление связи видов расчетов по периоду действия расчетов. Конкуренция возникает вследствие невозможности выполнения нескольких видов расчетов одновременно. Необходимо выбрать тот расчет, который в данном периоде будет выполнен. Настройка механизма вытеснения задается в описании конкретного вида расчета. Такая настройка выполняется в разделе Вытесняющие (виды расчетов). Например, расчет Оплата по окладу не может применяться одновременно с расчетом Оплата по больничному листу. При этом говорят, что расчет больничного вытесняет расчет оклада, т. е. за период, в котором «действует» больничный, оклад не начисляется. Описание механизма вытеснения см. здесь.
Фактический период действия ‑ если расчет не вытесняется другими расчетами, то фактический период совпадает с периодом действия. Если есть вытесняющие виды расчетов, то фактический период определяется как совокупность непересекающихся периодов, в которых данный расчет не вытеснялся. На рис. 467 приводится графическое представление фактического периода действия в случае вытеснения расчетом Больничный расчета Оклад.

Фактический период действия представляет собой вторичные данные, т. е. результат вычислений, выполняемых системой. Пересчет фактического периода действия выполняется при любой записи набора, в том числе пустого (отмена проведения).
ВНИМАНИЕ! Результат расчетов не зависит от последовательности ввода (регистрации) данных.
Базовый период ‑ определяет период, за который будут выбираться результаты расчетов, используемых (являющихся базовыми) для данного расчета. Например, при начислении премии за май 2008 г. учитываются результаты начислений, выполненных определенными видами расчетов за некоторый период (это могут быть Оклад, Доплата, Отпуск). Этот период и будет являться базовым для расчета премии. Настройка связи видов расчетов по базовому периоду производится в описании конкретного вида расчета в разделе Базовые (виды расчетов).
12.3. Планы видов расчета
Объекты конфигурации данного вида предназначены для создания видов расчетов, используемых в регистрах расчета.
Ссылка на вид расчета ‑ одно из основных свойств записей регистра расчета, которое позволяет придать качественные различия разным учетным записям регистра расчета.
Редактирование свойств объектов типа План видов расчета и создание подчиненных объектов выполняются в окне редактирования (см. здесь), а также в палитре свойств. Далее будут описаны уникальные свойства плана видов расчета в дополнение к общим свойствам.
12.3.1. Категория свойств «Расчет»
Зависимость от базы ‑ если свойство Зависимость от базы отличается от значения Не зависит, то видам расчета такого плана видов расчета можно задать список базовых видов расчета. Состав базовых видов расчета определяется свойством Базовые планы видов расчета.
Базовые планы видов расчета ‑ задается список планов видов расчета, виды расчета которых могут включаться в список базовых видов расчета. Этот список базовых видов расчета используется регистром расчета при работе механизма получения базы.
Использует период действия ‑ если свойство установлено, то данный план видов расчета может быть назначен регистру расчета с периодом действия. При этом для каждого вида расчета может быть задан список вытесняющих видов расчета. Список вытесняющих видов расчета определяет работу механизма вытеснения соответствующего регистра расчета (см. здесь).
Указанные в данной категории свойства определяют состав реквизитов, включаемых в список при создании форм вида расчета. Если выбрано значение свойства Зависимость от базы ‑ Зависит от периода действия (регистрации), то в форму можно поместить табличное поле для выбора тех видов расчетов, которые являются базовыми для редактируемого расчета. Если свойство Использует период действия установлено, то в форму можно поместить табличное поле для выбора видов расчетов, которые являются вытесняющими для редактируемого вида расчета.
12.3.2. Предопределенные виды расчета
Особенностью плана видов расчета является наличие предопределенных видов расчета, сформированных на этапе конфигурирования. В режиме 1С:Предприятие пользователь также может редактировать такие виды расчета. Пометка удаления и удаление видов расчета (в том числе созданных в конфигураторе) регулируется правами доступа (см. здесь). Особенности работы с предопределенными элементами см. здесь.
Для редактирования списка предопределенных видов расчета нужно перейти в палитре свойств на закладку Прочее и щелкнуть по кнопке Предопределенные. На экран выводится список предопределенных видов расчета данного плана видов расчета (пример см. на рис. 468).

Рис. 468. Предопределенные планы видов расчета
Редактирование списка предопределенных видов расчета производится с помощью пунктов меню Действия.
Состав реквизитов (базовые и ведущие) предопределенных видов расчета зависит от установленных свойств данного объекта плана видов расчета, размещенных в категории Расчет.
Каждый предопределенный вид расчета редактируется в модальном окне. На закладке Основное вводятся основные свойства вида расчета.

Рис. 469. Редактирование плана видов расчета
Если выбрано значение свойства Зависимость от базы ‑ Зависит по периоду действия (регистрации), то форма имеет закладку Базовые. На ней указываются те виды расчета, которые являются базовыми для данного вида расчета и определяют работу механизма получения базы соответствующего регистра расчета.

Рис. 470. Базовые начисления вида расчета
Так, в приведенном примере (см. рис. 470) для вида расчета Больничный базовыми видами расчета являются Оклад и Доплата.
Если свойство Использует период действия установлено, то форма имеет закладку Вытесняющие. На ней указываются те виды расчета, которые вытесняют данный вид расчета по периоду действия и таким образом настраивают работу механизма вытеснения соответствующего регистра расчета.

Рис. 471. Вытесняющие виды расчетов
Из перечисленных в списке расчетов (см. рис. 471) следует указать вытесняющий вид расчета. В приведенном примере для вида расчета Больничный таких нет. Но при описании расчета Оклад следует отметить Больничный.
На закладке Ведущие указываются те виды расчета, которые определяют работу механизма перерасчетов соответствующего регистра расчета (т. е. того, которому назначен данный план видов расчета).

Рис. 472. Ведущие виды расчета
Помимо предопределенных видов расчета пользователь в режиме 1С:Предприятие может создавать собственные виды расчета и устанавливать им нужные свойства. Для этих целей в конфигураторе необходимо создать форму элемента, в которой следует разместить табличные поля для указания базовых, ведущих и вытесняемых видов расчета в зависимости от установленных свойств данного плана видов расчета.
12.4. Регистры расчета
12.4.1. Общая информация о регистрах расчета
Регистр расчета ‑ это объект конфигурации, который позволяет организовать учет результатов вычислений, выполненных расчетами, указанными в плане видов расчетов. Регистры расчета позволяют, например, реализовать регистрацию начислений в пользу физических лиц (оплата труда, оплата больничных листов, оплата дней отпуска и т. д.).
Учетные записи регистра расчета могут влиять на состояние других записей регистра. Различают два характера взаимного влияния учетных записей регистра расчета: конкуренция за период действия и зависимость по базовому периоду. Поясним эти способы взаимного влияния учетных записей на примерах.
12.4.1.1. Механизм вытеснения
Конкуренцию за период действия можно пояснить на примере начислений в пользу физического лица оплаты по основной форме оплаты труда (по окладу) и оплаты дней отпуска. Учетная запись, соответствующая оплате по окладу, и учетная запись, соответствующая оплате отпуска, не могут соответствовать одному и тому же промежутку времени, т. е. промежутки времени, за которые произведены такие начисления, не могут пересекаться. В регистре расчета такое поведение учетных записей (движений регистра) реализовано за счет использования понятия период действия записи регистра. Каждая запись регистра расчета имеет фактический период действия, задаваемый в общем случае набором из нескольких промежутков времени.
Так, если учетная запись, соответствующая отпуску, имеет период действия с 03.03.2008 по 13.03.2008, то учетная запись, соответствующая начислению по окладу, может, например, иметь фактический период действия, состоящий из двух промежутков: с 01.03.2008 по 02.03.2008 и с 14.03.2008 по 20.03.2008.
Конкуренция за период действия поддерживается механизмом вытеснения регистра расчета, работа которого определяется составом вытесняющих видов расчета, датами периода действия и т. д.
12.4.1.2. Механизм перерасчетов
Зависимость учетных записей по базовому периоду действия можно рассмотреть на примере начислений в пользу физического лица оплаты по окладу и зависящего от него начисления по среднему заработку. Если в регистре происходит изменение состояния учетных записей оплаты по окладу в некотором периоде (удаление, изменение или ввод новых учетных записей), то это приводит к необходимости пересмотра результатов учетных записей оплаты по среднему заработку, если такие записи имеются в соответствующем периоде. Для реализации такого взаимного влияния учетных записей регистра расчета введено понятие базовый период записи регистра. Так, если учетная запись, соответствующая оплате по среднему заработку, имеет базовый период с 01.01.2008 по 31.03.2008 (т. е. использует средний заработок за три месяца), то любые изменения в учетных записях оплаты по окладу за этот период приведут к необходимости пересмотра учетной записи оплаты по среднему заработку.
12.4.2. Редактирование регистра расчета
Для работы с регистрами расчета предназначена ветвь Регистры расчета дерева конфигурации.
При редактировании регистра расчета определяется план видов расчета, поддержка периода действия и базового периода, периодичность, разрабатывается структура регистра: создаются наборы измерений, ресурсов и реквизитов регистра; если необходимо, создаются экранные и печатные формы просмотра движений регистра.
Примечание. В качестве типа измерения регистра расчета не могут выступать значения типа УникальныйИдентификатор, ДвоичныеДанные, строка неограниченной длины.
В этом разделе будут описаны уникальные свойства регистра расчета в дополнение к общим свойствам объектов.
Редактирование свойств объектов типа Регистр расчета и создание подчиненных объектов выполняются в окне редактирования (см. здесь).
План видов расчета ‑ основная характеристика регистра. Подробнее см. здесь. Для регистра расчета можно указать только один план видов расчета.
Период действия ‑ если свойство установлено, то взаимное влияние движений данного регистра принимает конкурирующий характер. Примером конкурирующих движений может служить начисление заработной платы и оплата больничного листа ‑ нельзя одновременно и болеть, и работать, т. е. получать и оклад, и деньги по больничному листу. Такие расчеты взаимно исключают друг друга во времени, и система должна гарантировать, что ввод одного из них приведет к исключению другого.
Регистр расчета с поддержкой периода действия имеет ограничение на количество записей с одинаковыми значениями измерений, периода регистрации и вида расчета.
При расчете фактического периода действия, который выполняется при каждой записи набора записей регистра, может возникнуть ошибка нехватки памяти в том случае, если в расчете фактического периода действия участвует большое число одинаковых записей. Фактически, это значит, что есть ограничение на число записей, действующих в одном и том же отрезке времени. Например, для одного и того же сотрудника многократно введено начисление оклада за один и тот же период.
Значение ограничения зависит от различных условий (используемой СУБД, технических данных компьютера и т. д.), но, в любом случае, это ограничение не проявляется в условиях реальной практики.
График ‑ свойство доступно, если установлено свойство Период действия. Свойство представляет ссылку на регистр сведений, в котором описывается временная схема исходных данных, участвующих в расчете. График следует указывать для тех расчетов, которые зависят от исходных данных, распределенных в пределах периода действия по определенному правилу. Например, это может быть график учета рабочего времени организации с разбивкой по дням, учет лекционных часов с разбивкой по часам и т. д.
Значение графика ‑ свойство доступно, если установлено свойство Период действия. В свойстве выбирается ресурс регистра сведений, определенного в свойстве График.
Например, в качестве графика указан регистр сведений ГрафикРаботыОрганизации. Этот регистр имеет реквизиты РабочийДень (тип Булево) и РабочиеЧасы (тип Число). В первом указывается признак, является ли данная дата рабочим днем, а во втором ‑ число рабочих часов в рабочем дне. Выбор реквизита РабочийДень означает, что при расчете будет анализироваться, является ли конкретный день периода расчета рабочим (т. е. следует ли производить расчет заработной платы за указанный день). Выбор реквизита РабочиеЧасы означает, что при расчете будет выбираться число рабочих часов и на основе этого значения будет произведен указанный расчет. Собственно распределение задается в режиме 1С:Предприятие (вручную или средствами встроенного языка).
Дата графика ‑ свойство доступно, если установлено свойство Период действия. В свойстве выбирается измерение регистра сведений, определенного в свойстве График и имеющее тип Дата. По значению данного свойства осуществляется привязка к значениям ресурса регистра сведений, указанного в свойстве Значение графика.
Базовый период ‑ если свойство установлено, то устанавливается связанный характер взаимного влияния движений данного регистра. Примером связанных движений может служить связь расчета сумм начисления выплат по средней от сумм начисления в базовом периоде.
Периодичность ‑ определяет период, с которым регистрируются движения и в пределах которого движения могут влиять друг на друга (для регистров, поддерживающих период действия).
Перерасчеты ‑ подчиненные объекты регистра, которые позволяют задать правила взаимного влияния движений регистров. В группе Связь палитры свойств объекта в свойстве Измерение регистра указывается основное измерение текущего регистра, которое следует пересчитать при изменении данных ведущих регистров, указанных в свойстве Данные ведущих регистров. Например, перерасчет суммы удержания по физическому лицу будет формироваться при изменениях начислений (оплата труда, премии).
Если установлено свойство Базовый период, то формирование данных перерасчетов будет выполнено автоматически. Если свойство не установлено, то формирование данных перерасчетов должно производиться пользователем вручную (при проектировании следует разработать специальную форму ввода перерасчетов и механизм их выполнения).